2022-10-10 Python 3.11の新機能(その9) 型ヒントの新機能 - その他
型ヒント関連の新機能はまだ他にもありますが、ここでは以下の機能を紹介します。
TypedDict と NamedTuple で Generic を定義可能に¶
Python 3.10までは、TypedDict と NamedTuple を定義するとき、派生元として Genericなど、他の型を指定できませんでした。
このため、TypedDict
と NamedTuple
をジェネリックスとして使えなかったのですが、Python3.11ではこの制限が緩和され、Generic
から継承できるようになりました。次のように、型変数を利用した型定義が
2022-10-10 Python 3.11の新機能(その8) 型ヒントの新機能 - PEP-655 TypedDictで要素の省略可・不可を個別に設定できるようになった
Python 3.11で追加された PEP-655 TypedDictで個別の要素ごとに省略可・不可を指定可能にする では、typing.Required と typing.NotRequired が追加され、辞書の個別の要素ごとに省略可・不可を指定できるようになりました。
TypedDict は決まったキーを持つ辞書オブジェクトの型宣言で、次のように辞書のキーと値を宣言できます。
from typing import TypedDict
class Address(TypedDict):
addr1: str
addr2: str
postal
2022-10-10 Python 3.11の新機能(その7) 型ヒントの新機能 - PEP-681 データクラス変換
Python 3.7で導入された dataclass はかなり広く使われるようになり、Pythonの型チェッカも dataclass
を認識してコーディングミスを防いでくれるようになっています。
ところで、Pythonのサードパーティライブラリには、似たようなインターフェースをもつクラスが多く存在します。たとえば DjangoのModel は次のようにデータベースのスキーマを定義します。
from django.db import models
class Person(models.Model):
first_name = models.
2022-10-09 Python 3.11の新機能(その6) 型ヒントの新機能 - PEP-673 Self型
Python 3.11では PEP-673 Self Type が実装され、 これも型ヒントではお待ちかねの新機能、定義中のクラスを示す型 typing.Self が追加されました。
従来のメソッド定義¶
これまでのPythonでは、クラスのメソッドなどを定義するとき、簡単にメソッドが属するクラスを取得する方法がありませんでした。このため、例えば自分自身を返り値とするメソッドのアノテーションを書くのは面倒で、Python 3.10までは typing.TypeVar を使って次のように記述していました。
from typing impor
2022-10-05 Python 3.11の新機能(その5) PEP-646 可変長ジェネリックス
Python 3.11でも、型ヒント 関連で多くの機能が追加されました。まず、長年望まれていた新機能、 PEP-646 可変長ジェネリックス の概要を紹介します。
可変長ジェネリックスについて説明する前に、まず普通のジェネリックスを復習しましょう。
ジェネリックス¶
まず、引数 a
を受け取り、要素が a
だけのタプルを返す関数を考えてみましょう。
def to_tuple(a):
return (a,)
to_tuple('100')
を実行すると、結果としてタプル ('100',)
が返ります。
この関数に型ヒントを指定してみましょう。引数 a
は